home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / flight-of-the-museum.swf / scripts / engine / WorldScene.as < prev   
Encoding:
Text File  |  2011-10-17  |  38.0 KB  |  1,206 lines

  1. package engine
  2. {
  3.    import copy.CopyBank;
  4.    import engine.dynamicObjects.*;
  5.    import engine.levelData.*;
  6.    import engine.scenery.Scene_Data;
  7.    import flash.display.BitmapData;
  8.    import flash.display.Sprite;
  9.    
  10.    public class WorldScene extends Sprite
  11.    {
  12.       
  13.       private static var _instance:WorldScene;
  14.        
  15.       
  16.       private var _sceneryMGObjects:Array;
  17.       
  18.       private var _purgeArray:Array;
  19.       
  20.       private var _fxObjects:Array;
  21.       
  22.       private var _mainInitOnce:Boolean = false;
  23.       
  24.       private var _motionObjects:Array;
  25.       
  26.       private var _ringCrashes:Number = 0;
  27.       
  28.       private var SCORE:Object;
  29.       
  30.       private var _hintTarget:*;
  31.       
  32.       private var _trackItems:Array;
  33.       
  34.       private var _sceneData:Object;
  35.       
  36.       private var _planeShadow:PlaneShadow;
  37.       
  38.       private var _tentacleObjects:Array;
  39.       
  40.       private var _sceneBitmapData:BitmapData;
  41.       
  42.       private var _endLifeTimer:Number = 0;
  43.       
  44.       private var _sceneryFGObjects:Array;
  45.       
  46.       private var _sceneCamera:SceneCamera;
  47.       
  48.       private var _missionDetails:Object;
  49.       
  50.       private var _cages:Array;
  51.       
  52.       private var _endLife:Boolean = false;
  53.       
  54.       private var _repeatMissions:Boolean = false;
  55.       
  56.       private var _ringFlyThroughs:Number = 0;
  57.       
  58.       private var _bonusScore:Number = 0;
  59.       
  60.       private var _plane:Plane;
  61.       
  62.       private var CON:Object;
  63.       
  64.       private var _hintTimer:Number = 0;
  65.       
  66.       private var _gameplayObjects:Array;
  67.       
  68.       private var _indians:Array;
  69.       
  70.       public function WorldScene()
  71.       {
  72.          _hintTimer = 0;
  73.          _ringFlyThroughs = 0;
  74.          _ringCrashes = 0;
  75.          _bonusScore = 0;
  76.          _endLife = false;
  77.          _endLifeTimer = 0;
  78.          _mainInitOnce = false;
  79.          _repeatMissions = false;
  80.          CON = {
  81.             "WORLD_WIDTH":4500,
  82.             "WORLD_HEIGHT":800,
  83.             "FLOOR_Y":680,
  84.             "SC_FOCAL_LENGTH":4,
  85.             "DRAW_METHOD":{
  86.                "PIXEL":0,
  87.                "FAST":1,
  88.                "SLOW":2
  89.             }
  90.          };
  91.          SCORE = {
  92.             "CAGE":7500,
  93.             "RING":5000,
  94.             "TABLET":2500,
  95.             "INDIAN":1000
  96.          };
  97.          super();
  98.          _instance = this;
  99.          _gameplayObjects = new Array();
  100.          _fxObjects = new Array();
  101.          _motionObjects = new Array();
  102.          _tentacleObjects = new Array();
  103.          _cages = new Array();
  104.          _indians = new Array();
  105.          _purgeArray = new Array();
  106.          _trackItems = new Array();
  107.       }
  108.       
  109.       public static function get Instance() : WorldScene
  110.       {
  111.          return _instance;
  112.       }
  113.       
  114.       public function createProjectile(sourceObj:*, pObj:*) : *
  115.       {
  116.          pObj.x = sourceObj.x;
  117.          pObj.y = sourceObj.y;
  118.          pObj.z = sourceObj.z;
  119.          pObj.launchAt(_plane,_sceneCamera.CamLoc);
  120.          _gameplayObjects.push(pObj);
  121.       }
  122.       
  123.       private function fireTrackItems() : *
  124.       {
  125.          var combinedItems:Array = null;
  126.          var i:Number = NaN;
  127.          var matchedItem:* = undefined;
  128.          var j:* = undefined;
  129.          combinedItems = new Array();
  130.          i = 0;
  131.          for(i = 0; i < _trackItems.length; i++)
  132.          {
  133.             trace("found item to fire: " + _trackItems[i]);
  134.             matchedItem = null;
  135.             for(j = 0; j < combinedItems.length; j++)
  136.             {
  137.                if(combinedItems[j].Name == _trackItems[i])
  138.                {
  139.                   matchedItem = combinedItems[j];
  140.                   break;
  141.                }
  142.             }
  143.             if(matchedItem)
  144.             {
  145.                ++matchedItem.Count;
  146.             }
  147.             else
  148.             {
  149.                combinedItems.push({
  150.                   "Name":_trackItems[i],
  151.                   "Count":1
  152.                });
  153.             }
  154.          }
  155.          for(i = 0; i < combinedItems.length; i++)
  156.          {
  157.             Main.Instance.Tracker.trackEvent("NATM2_Flight","miscellaneous",combinedItems[i].Name,combinedItems[i].Count);
  158.          }
  159.          _trackItems = new Array();
  160.       }
  161.       
  162.       public function get Cages() : Array
  163.       {
  164.          return _cages;
  165.       }
  166.       
  167.       public function setMissionDetails(missionObj:*) : *
  168.       {
  169.          _missionDetails = missionObj;
  170.       }
  171.       
  172.       public function displayBonusScore() : *
  173.       {
  174.          var scoreObj:ScoreObject = null;
  175.          if(_bonusScore > 0)
  176.          {
  177.             scoreObj = new ScoreObject(_bonusScore);
  178.             scoreObj.x = _plane.x + -_sceneCamera.CamLoc.x * (_plane.z - 1);
  179.             scoreObj.y = _plane.y - 0 + -_sceneCamera.CamLoc.y * (_plane.z - 1);
  180.             scoreObj.z = 1;
  181.             scoreObj.vx = 0;
  182.             scoreObj.vy = -0.2;
  183.             _fxObjects.push(scoreObj);
  184.             Engine.Instance.addScore(_bonusScore);
  185.          }
  186.       }
  187.       
  188.       public function dropBomb() : *
  189.       {
  190.          var bomb:* = undefined;
  191.          bomb = new Bomb();
  192.          bomb.x = _plane.x + -_sceneCamera.CamLoc.x * (_plane.z - 1);
  193.          bomb.y = _plane.y + 20 + -_sceneCamera.CamLoc.y * (_plane.z - 1);
  194.          bomb.vx = _plane.vx / 2;
  195.          bomb.vy = _plane.vy / 4;
  196.          bomb.z = 1;
  197.          _gameplayObjects.splice(0,0,bomb);
  198.       }
  199.       
  200.       public function get SceneData() : Object
  201.       {
  202.          return _sceneData;
  203.       }
  204.       
  205.       public function get MotionObjects() : Array
  206.       {
  207.          return _motionObjects;
  208.       }
  209.       
  210.       public function createBurningEmbers(obj:*) : *
  211.       {
  212.          var ember:* = undefined;
  213.          ember = new Ember();
  214.          ember.x = obj.x - 28;
  215.          ember.y = obj.y - 5;
  216.          ember.z = obj.z;
  217.          ember.vx = -7;
  218.          ember.vy = -2;
  219.          _gameplayObjects.push(ember);
  220.          ember = new Ember();
  221.          ember.x = obj.x - 28;
  222.          ember.y = obj.y - 5;
  223.          ember.z = obj.z;
  224.          ember.vx = 7;
  225.          ember.vy = -2;
  226.          _gameplayObjects.push(ember);
  227.          ember = new Ember();
  228.          ember.x = obj.x - 28;
  229.          ember.y = obj.y - 5;
  230.          ember.z = obj.z;
  231.          ember.vx = Math.random() * 0.2 - 0.1;
  232.          ember.vy = -8;
  233.          _gameplayObjects.push(ember);
  234.       }
  235.       
  236.       public function lobProjectile(sourceObj:*, pObj:*) : *
  237.       {
  238.          pObj.x = sourceObj.x;
  239.          pObj.y = sourceObj.y;
  240.          pObj.z = sourceObj.z;
  241.          pObj.lob(_plane,_sceneCamera.CamLoc);
  242.          _gameplayObjects.push(pObj);
  243.       }
  244.       
  245.       public function clearMissionElements() : *
  246.       {
  247.          var i:* = undefined;
  248.          var removeOk:Boolean = false;
  249.          _fxObjects.splice(0,_fxObjects.length);
  250.          _tentacleObjects.splice(0,_tentacleObjects.length);
  251.          _cages.splice(0,_cages.length);
  252.          _indians.splice(0,_indians.length);
  253.          _purgeArray.splice(0,_purgeArray.length);
  254.          for(i = 0; i < _gameplayObjects.length; i++)
  255.          {
  256.             removeOk = true;
  257.             if(_gameplayObjects[i] is Plane || _gameplayObjects[i] is PlaneShadow || _gameplayObjects[i] is SquidInkEmitter)
  258.             {
  259.                removeOk = false;
  260.             }
  261.             if(removeOk)
  262.             {
  263.                _gameplayObjects.splice(i,1);
  264.                i--;
  265.             }
  266.          }
  267.          _ringFlyThroughs = 0;
  268.          _ringCrashes = 0;
  269.       }
  270.       
  271.       public function get ActiveBombs() : Array
  272.       {
  273.          return new Array();
  274.       }
  275.       
  276.       public function addRingScore(obj:*) : *
  277.       {
  278.          var multiplyer:Number = NaN;
  279.          var scoreObj:ScoreObject = null;
  280.          ++_ringFlyThroughs;
  281.          if(_ringFlyThroughs > 5)
  282.          {
  283.             Engine.Instance.setPopupMessage(CopyBank.Instance.RingCombo);
  284.             _ringFlyThroughs = 0;
  285.             queueTrackItem("RingCombos");
  286.          }
  287.          multiplyer = 1;
  288.          if(!obj.HasCollided)
  289.          {
  290.             multiplyer = 3;
  291.             queueTrackItem("RingsCollectedFlawlessly");
  292.          }
  293.          else
  294.          {
  295.             queueTrackItem("RingsCollectedBadly");
  296.          }
  297.          Engine.Instance.addScore(SCORE.RING * multiplyer);
  298.          scoreObj = new ScoreObject(SCORE.RING * multiplyer);
  299.          scoreObj.s = 1;
  300.          scoreObj.x = obj.x;
  301.          scoreObj.y = obj.y;
  302.          scoreObj.z = obj.z;
  303.          scoreObj.vy = -1.45;
  304.          _fxObjects.push(scoreObj);
  305.          registerObjectivePoint("Ring");
  306.       }
  307.       
  308.       public function initStaticElements() : *
  309.       {
  310.          var bg:BitmapData = null;
  311.          var sub_bg_city:BitmapData = null;
  312.          var sub_bg_arch:BitmapData = null;
  313.          var sub_bg_space:BitmapData = null;
  314.          var inkEmitter:* = undefined;
  315.          var alCapone:* = undefined;
  316.          var rocket:* = undefined;
  317.          addEventListener("enterFrame",onWorldSceneEnterFrame);
  318.          _sceneryMGObjects = new Array();
  319.          _sceneryFGObjects = new Array();
  320.          bg = new scene_background(4500,568);
  321.          sub_bg_city = new SBG_City(606,408);
  322.          sub_bg_arch = new SBG_Arch(326,484);
  323.          sub_bg_space = new SBG_Space(1019,451);
  324.          placeScenery();
  325.          inkEmitter = new SquidInkEmitter();
  326.          inkEmitter.x = 1268;
  327.          inkEmitter.y = 331;
  328.          _motionObjects.push(inkEmitter);
  329.          _sceneryMGObjects.push(inkEmitter);
  330.          alCapone = new AlCapone();
  331.          alCapone.x = 1974;
  332.          alCapone.y = 391;
  333.          _motionObjects.push(alCapone);
  334.          _sceneryMGObjects.push(alCapone);
  335.          rocket = new Rocket();
  336.          rocket.x = 3566;
  337.          rocket.y = 362;
  338.          _motionObjects.push(rocket);
  339.          _sceneryMGObjects.push(rocket);
  340.          _plane = new Plane();
  341.          _gameplayObjects.push(_plane);
  342.          _sceneCamera = new SceneCamera();
  343.          addChild(_sceneCamera);
  344.          _sceneCamera.init();
  345.          _planeShadow = new PlaneShadow();
  346.          _gameplayObjects.push(_planeShadow);
  347.          _sceneCamera.Subject = _plane;
  348.          _sceneData = {
  349.             "bg":bg,
  350.             "sub_bg_city":sub_bg_city,
  351.             "sub_bg_arch":sub_bg_arch,
  352.             "sub_bg_space":sub_bg_space,
  353.             "GameplayObjects":_gameplayObjects,
  354.             "FXObjects":_fxObjects,
  355.             "SceneryMGObjects":_sceneryMGObjects,
  356.             "SceneryFGObjects":_sceneryFGObjects
  357.          };
  358.       }
  359.       
  360.       private function setGoalHint() : *
  361.       {
  362.          if(xGreaterThanPlane(_hintTarget))
  363.          {
  364.             Engine.Instance.setPopupMessage(CopyBank.Instance.GoalRight);
  365.          }
  366.          else
  367.          {
  368.             Engine.Instance.setPopupMessage(CopyBank.Instance.GoalLeft);
  369.          }
  370.       }
  371.       
  372.       public function get SceneryFGObjects() : Array
  373.       {
  374.          return _sceneryFGObjects;
  375.       }
  376.       
  377.       private function placeScenery() : *
  378.       {
  379.          var sd:Scene_Data = null;
  380.          sd = new Scene_Data();
  381.          sd.populate();
  382.       }
  383.       
  384.       public function createFX(sourceObj:*, fObj:*) : *
  385.       {
  386.          fObj.x = sourceObj.x;
  387.          fObj.y = sourceObj.y;
  388.          fObj.z = sourceObj.z;
  389.          _fxObjects.push(fObj);
  390.       }
  391.       
  392.       public function generateSmokeParticles(obj:*, num:Number = 0) : *
  393.       {
  394.          var i:* = undefined;
  395.          var sm:* = undefined;
  396.          for(i = 0; i < num; i++)
  397.          {
  398.             sm = new SmokePuff2();
  399.             sm.x = obj.x;
  400.             sm.y = obj.y;
  401.             sm.z = obj.z;
  402.             sm.vy = Math.random() * -4 - 2;
  403.             sm.vx = Math.random() * 0.4 - 0.2;
  404.             _fxObjects.push(sm);
  405.          }
  406.       }
  407.       
  408.       public function clearGPObject(obj:*) : *
  409.       {
  410.          _purgeArray.push(obj);
  411.       }
  412.       
  413.       private function queueTrackItem(str:String) : *
  414.       {
  415.       }
  416.       
  417.       public function generatePlaneExplosion(obj:*, extraShrap:Number = 0) : *
  418.       {
  419.          var sNum:Number = NaN;
  420.          var i:Number = NaN;
  421.          var sm:* = undefined;
  422.          i = 0;
  423.          sNum = Math.floor(Math.random() * 4) + 1 + extraShrap;
  424.          for(i = 0; i < sNum; i++)
  425.          {
  426.             sm = new SmokePuff2();
  427.             sm.x = _plane.x;
  428.             sm.y = _plane.y;
  429.             sm.z = _plane.z;
  430.             _fxObjects.push(sm);
  431.          }
  432.          generateExplosion(obj,extraShrap);
  433.       }
  434.       
  435.       public function xGreaterThanPlane(obj:*) : Boolean
  436.       {
  437.          var oX:Number = NaN;
  438.          var pX:Number = NaN;
  439.          oX = obj.x + -_sceneCamera.CamLoc.x * obj.z;
  440.          pX = _plane.x + -_sceneCamera.CamLoc.x * _plane.z;
  441.          if(oX > pX)
  442.          {
  443.             return true;
  444.          }
  445.          return false;
  446.       }
  447.       
  448.       public function get TentacleObjects() : Array
  449.       {
  450.          return _tentacleObjects;
  451.       }
  452.       
  453.       public function generateSparks(obj:*, extraShrap:Number = 0) : *
  454.       {
  455.          var sNum:Number = NaN;
  456.          var i:Number = NaN;
  457.          var spark:* = undefined;
  458.          var sparkZ:Number = NaN;
  459.          i = 0;
  460.          sNum = Math.floor(Math.random() * 75) + 25 + extraShrap;
  461.          for(i = 0; i < sNum; i++)
  462.          {
  463.             spark = new SparkSmall();
  464.             sparkZ = 2 + (Math.random() * 4 - 1);
  465.             spark.x = obj.x + 20 + -_sceneCamera.CamLoc.x * (obj.z - sparkZ);
  466.             spark.y = obj.y + 20 + -_sceneCamera.CamLoc.y * (obj.z - sparkZ);
  467.             spark.z = sparkZ;
  468.             _fxObjects.push(spark);
  469.          }
  470.       }
  471.       
  472.       public function get PlaneObj() : Plane
  473.       {
  474.          return _plane;
  475.       }
  476.       
  477.       public function get Indians() : Array
  478.       {
  479.          return _indians;
  480.       }
  481.       
  482.       public function generateExplosion(obj:*, extraShrap:Number = 0) : *
  483.       {
  484.          var sNum:Number = NaN;
  485.          var i:Number = NaN;
  486.          var explosion:* = undefined;
  487.          var spark:* = undefined;
  488.          i = 0;
  489.          sNum = Math.floor(Math.random() * 15) + 15 + extraShrap;
  490.          for(i = 0; i < sNum; i++)
  491.          {
  492.             spark = new Spark();
  493.             spark.x = obj.x;
  494.             spark.y = obj.y;
  495.             spark.z = obj.z;
  496.             _fxObjects.push(spark);
  497.          }
  498.          explosion = new Explosion();
  499.          explosion.x = obj.x;
  500.          explosion.y = obj.y;
  501.          explosion.z = obj.z;
  502.          _fxObjects.push(explosion);
  503.       }
  504.       
  505.       public function addGPObject(obj:*) : *
  506.       {
  507.          _gameplayObjects.push(obj);
  508.       }
  509.       
  510.       public function respawn() : *
  511.       {
  512.          trace("respawn");
  513.          _plane.init();
  514.          _planeShadow.vis = true;
  515.          _endLife = false;
  516.          _endLifeTimer = 0;
  517.       }
  518.       
  519.       public function createEmberTrailParticle(obj:*) : *
  520.       {
  521.          var sm:* = undefined;
  522.          sm = new SmokePuff2();
  523.          sm.x = obj.x - 10 - obj.vx;
  524.          sm.y = obj.y - 3 - obj.vy;
  525.          sm.z = obj.z;
  526.          sm.vy = 0.05;
  527.          sm.vx = Math.random() * 0.1 - 0.05;
  528.          _fxObjects.push(sm);
  529.       }
  530.       
  531.       public function get MissionDetails() : Object
  532.       {
  533.          if(!_missionDetails)
  534.          {
  535.             return {"StartLoc":{
  536.                "x":-1,
  537.                "y":-1
  538.             }};
  539.          }
  540.          return _missionDetails;
  541.       }
  542.       
  543.       public function addGPObjectAt(obj:*, index:*) : *
  544.       {
  545.          _gameplayObjects.splice(index,0,obj);
  546.       }
  547.       
  548.       public function createCaponeCork(obj:*) : *
  549.       {
  550.          var cork:* = undefined;
  551.          cork = new Cork();
  552.          cork.x = obj.x - 40;
  553.          cork.y = obj.y - 4;
  554.          cork.z = obj.z;
  555.          _gameplayObjects.push(cork);
  556.       }
  557.       
  558.       public function collisionRegistered(obj:*) : *
  559.       {
  560.          var i:Number = NaN;
  561.          var j:Number = NaN;
  562.          var scoreObj:ScoreObject = null;
  563.          var sNum:Number = NaN;
  564.          var inkSplatter:* = undefined;
  565.          i = 0;
  566.          j = 0;
  567.          if(obj is GoalRing)
  568.          {
  569.             obj.flyThrough();
  570.          }
  571.          if(obj is GoalRing_FG)
  572.          {
  573.             if(!obj.parentRing.Collision)
  574.             {
  575.                obj.parentRing.collide("fg",_plane.r);
  576.                generatePlaneExplosion(obj);
  577.                Main.Instance.playSound("hitRing");
  578.                queueTrackItem("RingsCollided");
  579.                _plane.damage(8);
  580.                _plane.deflectMinor();
  581.                ++_ringCrashes;
  582.                _ringFlyThroughs = 0;
  583.                if(_ringCrashes > 4)
  584.                {
  585.                   Engine.Instance.setPopupMessage(CopyBank.Instance.CrashTaunt);
  586.                }
  587.             }
  588.          }
  589.          if(obj is GoalRing_BG)
  590.          {
  591.             if(!obj.parentRing.Collision)
  592.             {
  593.                obj.parentRing.collide("bg",_plane.r);
  594.                generatePlaneExplosion(obj);
  595.                Main.Instance.playSound("hitRing");
  596.                queueTrackItem("RingsCollided");
  597.                _plane.damage(8);
  598.                _plane.deflectMinor();
  599.                ++_ringCrashes;
  600.                _ringFlyThroughs = 0;
  601.                if(_ringCrashes > 4)
  602.                {
  603.                   Engine.Instance.setPopupMessage(CopyBank.Instance.CrashTaunt);
  604.                }
  605.             }
  606.          }
  607.          if(obj is Spear)
  608.          {
  609.             _plane.damage(18);
  610.             _purgeArray.push(obj);
  611.             generatePlaneExplosion(obj);
  612.             queueTrackItem("SpearCollisions");
  613.             Main.Instance.playSound("hit");
  614.             if(Math.random() > 0.75)
  615.             {
  616.                Engine.Instance.setPopupMessage(CopyBank.Instance.PlaneHit);
  617.             }
  618.          }
  619.          if(obj is Cork && _plane.TempDamage <= 1 && _plane.Life > 0)
  620.          {
  621.             _plane.damage(18);
  622.             _plane.deflectMinor();
  623.             generatePlaneExplosion(obj);
  624.             queueTrackItem("CorkCollisions");
  625.             Main.Instance.playSound("hit");
  626.             if(Math.random() > 0.75)
  627.             {
  628.                Engine.Instance.setPopupMessage(CopyBank.Instance.PlaneHit);
  629.             }
  630.          }
  631.          if(obj is Podium && _plane.Life > 0)
  632.          {
  633.             _plane.deflectUp();
  634.             _plane.damage(25);
  635.             generatePlaneExplosion(_plane);
  636.             Main.Instance.playSound("hit");
  637.          }
  638.          if(obj is TabletPiece && _plane.Life > 0)
  639.          {
  640.             generateSparks(obj);
  641.             Engine.Instance.addScore(SCORE.TABLET);
  642.             _purgeArray.push(obj);
  643.             Main.Instance.playSound("pickup");
  644.             queueTrackItem("TabletsCollected");
  645.             scoreObj = new ScoreObject(SCORE.TABLET);
  646.             scoreObj.s = 0.75;
  647.             scoreObj.x = obj.x;
  648.             scoreObj.y = obj.y;
  649.             scoreObj.z = obj.z;
  650.             scoreObj.vy = -1.45;
  651.             _fxObjects.push(scoreObj);
  652.             registerObjectivePoint("Tablet");
  653.          }
  654.          if(obj is FuelIcon)
  655.          {
  656.             _plane.addFuel(50);
  657.             _purgeArray.push(obj);
  658.             generateSparks(obj,-20);
  659.             Main.Instance.playSound("pickup");
  660.             queueTrackItem("FuelCollected");
  661.             Engine.Instance.setPopupMessage(CopyBank.Instance.FuelCollect);
  662.          }
  663.          if(obj is TentacleSegment)
  664.          {
  665.             if(_plane.TempDamage <= 1 && _plane.Life > 0)
  666.             {
  667.                generatePlaneExplosion(_plane);
  668.                _plane.damage(10);
  669.                _plane.deflectMinor();
  670.                queueTrackItem("TentacleCollisions");
  671.                Main.Instance.playSound("hit");
  672.             }
  673.          }
  674.          if(obj is Rocket)
  675.          {
  676.             if(_plane.TempDamage <= 1 && _plane.Life > 0 && Boolean(obj.Firing))
  677.             {
  678.                generatePlaneExplosion(_plane);
  679.                _plane.damage(25);
  680.                _plane.deflectMinor();
  681.             }
  682.          }
  683.          if(obj is Ember)
  684.          {
  685.             if(_plane.TempDamage <= 1 && _plane.Life > 0)
  686.             {
  687.                generatePlaneExplosion(_plane);
  688.                _plane.damage(15);
  689.                _plane.deflectMinor();
  690.                Main.Instance.playSound("hit");
  691.             }
  692.          }
  693.          if(obj is InkBlob)
  694.          {
  695.             if(_plane.Ink <= 0 && _plane.Life > 0)
  696.             {
  697.                _plane.inkHit();
  698.                Main.Instance.playSound("ink");
  699.                queueTrackItem("InkCollisions");
  700.                obj.vx *= -0.2;
  701.                obj.vy *= 0.5;
  702.                sNum = Math.floor(Math.random() * 15) + 40;
  703.                for(i = 0; i < sNum; i++)
  704.                {
  705.                   inkSplatter = new InkSplatterParticle();
  706.                   inkSplatter.x = _plane.x;
  707.                   inkSplatter.y = _plane.y;
  708.                   inkSplatter.z = _plane.z;
  709.                   inkSplatter.vx += _plane.vx * 0.5;
  710.                   inkSplatter.vy += _plane.vy * 0.5;
  711.                   _fxObjects.push(inkSplatter);
  712.                }
  713.                Engine.Instance.setPopupMessage(CopyBank.Instance.Ink);
  714.             }
  715.          }
  716.       }
  717.       
  718.       public function registerObjectivePoint(type:String) : *
  719.       {
  720.          var i:Number = NaN;
  721.          var totalCount:Number = NaN;
  722.          var typeFound:Boolean = false;
  723.          i = 0;
  724.          totalCount = 0;
  725.          typeFound = false;
  726.          for(i = 0; i < _missionDetails.GoalParamaters.length; i++)
  727.          {
  728.             if(_missionDetails.GoalParamaters[i].Type == type)
  729.             {
  730.                typeFound = true;
  731.                --_missionDetails.GoalParamaters[i].Count;
  732.                totalCount += _missionDetails.GoalParamaters[i].Count;
  733.             }
  734.          }
  735.          if(totalCount <= 0 && typeFound)
  736.          {
  737.             _bonusScore = 0;
  738.             _bonusScore += _plane.Life / 100 * ((Engine.Instance.Difficulty + 1) / 5 * 100000);
  739.             trace("bonus score from life: " + _bonusScore + " ((" + String(_plane.Life / 100) + "))" + String(Engine.Instance.Difficulty / 5) + "))");
  740.             _bonusScore += _plane.Fuel / 100 * ((Engine.Instance.Difficulty + 1) / 5 * 75000);
  741.             trace("bonus score from fuel: " + String(_plane.Fuel / 100 * ((Engine.Instance.Difficulty + 1) / 5 * 25000)));
  742.             _bonusScore = Math.floor(_bonusScore);
  743.             if(_repeatMissions)
  744.             {
  745.                _bonusScore += 500000;
  746.             }
  747.             fireTrackItems();
  748.             Engine.Instance.missionComplete();
  749.             Engine.Instance.setPopupMessage(CopyBank.Instance.MissionComplete);
  750.          }
  751.       }
  752.       
  753.       public function get Con() : Object
  754.       {
  755.          return CON;
  756.       }
  757.       
  758.       private function getDistance(sx:Number, sy:Number, tx:Number, ty:Number) : *
  759.       {
  760.          var dx:* = undefined;
  761.          var dy:* = undefined;
  762.          var dist:Number = NaN;
  763.          dx = Math.abs(sx - tx);
  764.          dy = Math.abs(sy - ty);
  765.          dist = Math.sqrt(dx * dx + dy * dy);
  766.          if(!isNaN(dist))
  767.          {
  768.             return dist;
  769.          }
  770.          return 0;
  771.       }
  772.       
  773.       public function initMissionElements(missionNumber:Number) : *
  774.       {
  775.          var i:Number = NaN;
  776.          var levelData:* = undefined;
  777.          i = 0;
  778.          if(missionNumber != 1)
  779.          {
  780.             clearMissionElements();
  781.          }
  782.          if(missionNumber > 16)
  783.          {
  784.             Engine.Instance.setPopupMessage(CopyBank.Instance.AllMissionsDone);
  785.             missionNumber = Math.floor(Math.random() * 2.99) + 14;
  786.             _repeatMissions = true;
  787.          }
  788.          switch(missionNumber)
  789.          {
  790.             case 1:
  791.                _repeatMissions = false;
  792.                levelData = new Level_01();
  793.                levelData.buildLevel();
  794.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/01");
  795.                break;
  796.             case 2:
  797.                levelData = new Level_02();
  798.                levelData.buildLevel();
  799.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/02");
  800.                break;
  801.             case 3:
  802.                levelData = new Level_03();
  803.                levelData.buildLevel();
  804.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/03");
  805.                break;
  806.             case 4:
  807.                levelData = new Level_04();
  808.                levelData.buildLevel();
  809.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/04");
  810.                break;
  811.             case 5:
  812.                levelData = new Level_05();
  813.                levelData.buildLevel();
  814.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/05");
  815.                break;
  816.             case 6:
  817.                levelData = new Level_06();
  818.                levelData.buildLevel();
  819.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/06");
  820.                break;
  821.             case 7:
  822.                levelData = new Level_07();
  823.                levelData.buildLevel();
  824.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/07");
  825.                break;
  826.             case 8:
  827.                levelData = new Level_08();
  828.                levelData.buildLevel();
  829.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/08");
  830.                break;
  831.             case 9:
  832.                levelData = new Level_09();
  833.                levelData.buildLevel();
  834.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/09");
  835.                break;
  836.             case 10:
  837.                levelData = new Level_10();
  838.                levelData.buildLevel();
  839.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/10");
  840.                break;
  841.             case 11:
  842.                levelData = new Level_11();
  843.                levelData.buildLevel();
  844.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/11");
  845.                break;
  846.             case 12:
  847.                levelData = new Level_12();
  848.                levelData.buildLevel();
  849.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/12");
  850.                break;
  851.             case 13:
  852.                levelData = new Level_13();
  853.                levelData.buildLevel();
  854.                Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/13");
  855.                break;
  856.             case 14:
  857.                levelData = new Level_14();
  858.                levelData.buildLevel();
  859.                if(!_repeatMissions)
  860.                {
  861.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/14");
  862.                }
  863.                else
  864.                {
  865.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/14_repeated");
  866.                }
  867.                break;
  868.             case 15:
  869.                levelData = new Level_15();
  870.                levelData.buildLevel();
  871.                if(!_repeatMissions)
  872.                {
  873.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/15");
  874.                }
  875.                else
  876.                {
  877.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/15_repeated");
  878.                }
  879.                break;
  880.             case 16:
  881.                levelData = new Level_16();
  882.                levelData.buildLevel();
  883.                if(!_repeatMissions)
  884.                {
  885.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/16");
  886.                }
  887.                else
  888.                {
  889.                   Main.Instance.Tracker.trackPageview("NATM2_Flight/game/level/16_repeated");
  890.                }
  891.          }
  892.          _planeShadow.vis = true;
  893.          _endLife = false;
  894.          _endLifeTimer = 0;
  895.       }
  896.       
  897.       public function generateCagePieces(obj:*) : *
  898.       {
  899.          var cagePiece:* = undefined;
  900.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Back);
  901.          cagePiece.x = obj.x;
  902.          cagePiece.y = obj.y;
  903.          cagePiece.z = obj.z;
  904.          _fxObjects.push(cagePiece);
  905.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Front);
  906.          cagePiece.x = obj.x;
  907.          cagePiece.y = obj.y;
  908.          cagePiece.z = obj.z;
  909.          _fxObjects.push(cagePiece);
  910.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Lock);
  911.          cagePiece.x = obj.x;
  912.          cagePiece.y = obj.y;
  913.          cagePiece.z = obj.z;
  914.          _fxObjects.push(cagePiece);
  915.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Side);
  916.          cagePiece.x = obj.x;
  917.          cagePiece.y = obj.y;
  918.          cagePiece.z = obj.z;
  919.          _fxObjects.push(cagePiece);
  920.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Side);
  921.          cagePiece.x = obj.x;
  922.          cagePiece.y = obj.y;
  923.          cagePiece.z = obj.z;
  924.          _fxObjects.push(cagePiece);
  925.          cagePiece = new CagePiece(BitmapLibrary.Stills.DYN_CagePiece_Top);
  926.          cagePiece.x = obj.x;
  927.          cagePiece.y = obj.y;
  928.          cagePiece.z = obj.z;
  929.          _fxObjects.push(cagePiece);
  930.       }
  931.       
  932.       public function generateKeyExplosion(obj:*) : *
  933.       {
  934.          var i:* = undefined;
  935.          var spark:* = undefined;
  936.          for(i = 0; i < 50; i++)
  937.          {
  938.             if(Math.random() < 0.75)
  939.             {
  940.                spark = new SparkSmall();
  941.             }
  942.             else
  943.             {
  944.                spark = new Spark2();
  945.             }
  946.             spark.x = obj.x + 30;
  947.             spark.y = obj.y + 18;
  948.             spark.z = obj.z;
  949.             spark.vx = Math.random() * 4 - 2;
  950.             spark.vy = Math.random() * 11 - 12;
  951.             spark.s = 1.5 + Math.random() * 7;
  952.             _fxObjects.push(spark);
  953.          }
  954.       }
  955.       
  956.       public function killPlane() : *
  957.       {
  958.          _endLife = true;
  959.          _plane.vis = false;
  960.          _planeShadow.vis = false;
  961.       }
  962.       
  963.       private function getGameplayDistance(obj:*) : *
  964.       {
  965.          var oX:Number = NaN;
  966.          var pX:Number = NaN;
  967.          oX = obj.x + -_sceneCamera.CamLoc.x * obj.z;
  968.          pX = _plane.x + -_sceneCamera.CamLoc.x * _plane.z;
  969.          return Math.abs(oX - pX);
  970.       }
  971.       
  972.       private function onWorldSceneEnterFrame(event:*) : *
  973.       {
  974.          var i:int = 0;
  975.          var j:int = 0;
  976.          var len:int = 0;
  977.          var obj:Object = null;
  978.          var d:Number = NaN;
  979.          var scoreObj:ScoreObject = null;
  980.          var minDist:Number = NaN;
  981.          var dist:Number = NaN;
  982.          var o:Number = NaN;
  983.          var smokePuff:* = undefined;
  984.          if(Engine.Instance.State == Engine.Instance.STATES.Gameplay)
  985.          {
  986.             if(_endLife)
  987.             {
  988.                ++_endLifeTimer;
  989.                if(_endLifeTimer > 130)
  990.                {
  991.                   Engine.Instance.addLives(-1);
  992.                   if(Engine.Instance.Lives >= 0)
  993.                   {
  994.                      trace("respawn called from here");
  995.                      respawn();
  996.                   }
  997.                   else
  998.                   {
  999.                      Main.Instance.stopPropeller();
  1000.                   }
  1001.                }
  1002.             }
  1003.             i = 0;
  1004.             j = 0;
  1005.             minDist = 5000000;
  1006.             for(i = 0; i < _gameplayObjects.length; i++)
  1007.             {
  1008.                obj = _gameplayObjects[i];
  1009.                if(_missionDetails.GoalParamaters[0].Count > 0)
  1010.                {
  1011.                   if(obj is TabletPiece)
  1012.                   {
  1013.                      dist = getGameplayDistance(obj);
  1014.                      if(dist < minDist)
  1015.                      {
  1016.                         minDist = dist;
  1017.                      }
  1018.                      _hintTarget = obj;
  1019.                   }
  1020.                   if(obj is GoalRing && !obj.Collected)
  1021.                   {
  1022.                      dist = getGameplayDistance(obj);
  1023.                      if(dist < minDist)
  1024.                      {
  1025.                         minDist = dist;
  1026.                      }
  1027.                      _hintTarget = obj;
  1028.                   }
  1029.                   if(obj is Cage1 && !obj.Hit)
  1030.                   {
  1031.                      dist = getGameplayDistance(obj);
  1032.                      if(dist < minDist)
  1033.                      {
  1034.                         minDist = dist;
  1035.                      }
  1036.                      _hintTarget = obj;
  1037.                   }
  1038.                }
  1039.                else
  1040.                {
  1041.                   _hintTarget = null;
  1042.                   _hintTimer = 0;
  1043.                }
  1044.                if(obj != _plane)
  1045.                {
  1046.                   if(obj.AuditMeter >= obj.AuditThreshhold)
  1047.                   {
  1048.                      destroyObject(obj,_gameplayObjects);
  1049.                   }
  1050.                   if(obj.CollisionMethod == obj.CMethods.Radial)
  1051.                   {
  1052.                      if(obj is Bomb)
  1053.                      {
  1054.                         for(j = 0; j < _cages.length; j++)
  1055.                         {
  1056.                            d = getDistance(obj.x,obj.y,_cages[j].x,_cages[j].y);
  1057.                            if(d < 40 && !_cages[j].Hit)
  1058.                            {
  1059.                               queueTrackItem("CagesBombed");
  1060.                               _cages[j].hit();
  1061.                               generateKeyExplosion(obj);
  1062.                               Engine.Instance.addScore(SCORE.CAGE);
  1063.                               Main.Instance.playSound("keyCage");
  1064.                               registerObjectivePoint("Cage");
  1065.                               scoreObj = new ScoreObject(SCORE.CAGE);
  1066.                               scoreObj.s = 2;
  1067.                               scoreObj.x = _cages[j].x;
  1068.                               scoreObj.y = _cages[j].y;
  1069.                               scoreObj.z = _cages[j].z;
  1070.                               scoreObj.vy = -1.45;
  1071.                               _fxObjects.push(scoreObj);
  1072.                            }
  1073.                         }
  1074.                         for(j = 0; j < _indians.length; j++)
  1075.                         {
  1076.                            d = getDistance(obj.x,obj.y,_indians[j].x,_indians[j].y);
  1077.                            if(d < 45 && !_indians[j].Hit)
  1078.                            {
  1079.                               _indians[j].hit();
  1080.                               queueTrackItem("IndiansBombed");
  1081.                               generateKeyExplosion(obj);
  1082.                               Engine.Instance.addScore(SCORE.INDIAN);
  1083.                               scoreObj = new ScoreObject(SCORE.INDIAN);
  1084.                               scoreObj.s = 0.7;
  1085.                               scoreObj.x = _indians[j].x;
  1086.                               scoreObj.y = _indians[j].y;
  1087.                               scoreObj.z = _indians[j].z;
  1088.                               scoreObj.vy = -1.45;
  1089.                               _fxObjects.push(scoreObj);
  1090.                            }
  1091.                         }
  1092.                      }
  1093.                   }
  1094.                }
  1095.                if(obj.AuditMeter <= 10)
  1096.                {
  1097.                   obj.fStep();
  1098.                }
  1099.             }
  1100.             if(Math.abs(minDist) > 600)
  1101.             {
  1102.                ++_hintTimer;
  1103.             }
  1104.             else if(_hintTimer > 0)
  1105.             {
  1106.                --_hintTimer;
  1107.             }
  1108.             if(_hintTimer > 100)
  1109.             {
  1110.                _hintTimer = -100;
  1111.                setGoalHint();
  1112.             }
  1113.             for(i = 0; i < _motionObjects.length; i++)
  1114.             {
  1115.                _motionObjects[i].fStep();
  1116.             }
  1117.             for(i = 0; i < _tentacleObjects.length; i++)
  1118.             {
  1119.                _tentacleObjects[i].fStep();
  1120.             }
  1121.             for(i = 0; i < _fxObjects.length; i++)
  1122.             {
  1123.                obj = _fxObjects[i];
  1124.                obj.fStep();
  1125.                if(obj.AuditMeter >= 10)
  1126.                {
  1127.                   destroyObject(obj,_fxObjects);
  1128.                }
  1129.             }
  1130.             _planeShadow.x = _plane.x;
  1131.             _planeShadow.y = 600;
  1132.             o = _plane.y / 1300;
  1133.             if(o < 0)
  1134.             {
  1135.                o = 0;
  1136.             }
  1137.             if(o > 1)
  1138.             {
  1139.                o = 1;
  1140.             }
  1141.             _planeShadow.Opacity = o;
  1142.             _planeShadow.yflip = -0.3;
  1143.             _planeShadow.r = _plane.r;
  1144.             if(Math.random() > 0.45 && _plane.vis)
  1145.             {
  1146.                if(_plane.TempDamage > 1 && Math.random() > 0.5)
  1147.                {
  1148.                   smokePuff = new SmokePuff2();
  1149.                }
  1150.                else if(_plane.Life < 100 && Math.random() * 100 > (_plane.Life + 100) / 2)
  1151.                {
  1152.                   smokePuff = new SmokePuff2();
  1153.                }
  1154.                else
  1155.                {
  1156.                   smokePuff = new SmokePuff();
  1157.                }
  1158.                smokePuff.x = _plane.x - _plane.vx;
  1159.                smokePuff.y = _plane.y - _plane.vy + 15;
  1160.                _fxObjects.push(smokePuff);
  1161.             }
  1162.             for(i = 0; i < _purgeArray.length; i++)
  1163.             {
  1164.                obj = _purgeArray[i];
  1165.                destroyObject(obj,_gameplayObjects);
  1166.             }
  1167.             _purgeArray = new Array();
  1168.             _sceneCamera.updateDisplay();
  1169.          }
  1170.       }
  1171.       
  1172.       public function get SceneryMGObjects() : Array
  1173.       {
  1174.          return _sceneryMGObjects;
  1175.       }
  1176.       
  1177.       public function addMotionObject(obj:*) : *
  1178.       {
  1179.          _motionObjects.push(obj);
  1180.       }
  1181.       
  1182.       private function destroyObject(obj:*, sourceArray:Array) : *
  1183.       {
  1184.          var i:* = undefined;
  1185.          for(i = 0; i < sourceArray.length; i++)
  1186.          {
  1187.             if(sourceArray[i] == obj)
  1188.             {
  1189.                sourceArray.splice(i,1);
  1190.                break;
  1191.             }
  1192.          }
  1193.       }
  1194.       
  1195.       public function clearFX(obj:*) : *
  1196.       {
  1197.          destroyObject(obj,_fxObjects);
  1198.       }
  1199.       
  1200.       public function get GameplayObjects() : Array
  1201.       {
  1202.          return _gameplayObjects;
  1203.       }
  1204.    }
  1205. }
  1206.